如果有看過別人的example 一起上手的人,
一定都知道,
偵測對話功能是幾乎教學都會放的內容。
但如果你是照著我做的,
在加入 @client.event 的on_message 會發現有錯誤,
那是因為我們後台權限是沒有打開的,
以下直接上路。
打開官方後台打開你的目標應用程式,
左側有選單,選擇「Bot」
拉到下面,有一個Pirvileged Gateway Intents 的設定中,MESSAGE CONTENT INTENT打開 然後保存。
在 intents 加入一段,新增讀取訊息權限
intents.message_content = True
然後加入 @client.event
async def on_message(message):
print(message) # 印出message 內容
if message.author == client.user: # 排除機器人本身的訊息
return
if message.content == 'ping':
await message.channel.send('pong')
以下為 main.py 全部內容
# 導入 套件
import discord
import os
from dotenv import load_dotenv
# 取得環境設定
load_dotenv()
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")
# intents
intents = discord.Intents.default()
intents.message_content = True # NEW 新增要求讀取訊息權限
# client
client = discord.Client(intents=intents)
# event 事件處理
@client.event
async def on_ready():
print(f"「{client.user}」已登入")
@client.event
async def on_message(message):
print(message) # 印出message 內容
if message.author == client.user: # 排除機器人本身的訊息
return
if message.content == 'ping':
await message.channel.send('pong')
if __name__ == "__main__":
client.run(DISCORD_TOKEN)
如果想要看全部的code的話我放在 實作github,
但檔案內容可能有稍微變動 Tag: it_#5
Server重新執行後:
在已經邀請機器人的伺服器傳訊息,就會得到下列結果:
而在code中我有加入 print(message) # 印出message 內容
以上的訊息就可以區分訊息的來源:
Message 訊息資訊
TextChannel 文字頻道
Member 伺服器成員
Guild 伺服器
詳細項目內容可以查詢discord.py 了解內容
Message.content 檢查消息內容
Message.attachements 檢查郵件附件
Message.embeds 檢查消息嵌入
Message.compents 檢查消息組件
更多可以參考 Message 相關內容